/**
 * open-nof1.ai - AI 加密货币自动交易系统
 * Copyright (C) 2025 195440
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
 */

import type { StrategyParams, StrategyPromptContext } from "./types";

/**
 * 返佣套利策略配置（超短线高频策略）
 * 
 * 策略特点：
 * - 风险等级：中等风险
 * - 时间框架：只看1m和3m线（超短线）
 * - 杠杆范围：40%-60% 最大杠杆（如最大25倍，则使用10-15倍）
 * - 仓位大小：15-22%
 * - 适用人群：拥有高额手续费返佣的用户
 * - 目标月回报：15-25%（主要来自高频交易累积+手续费返佣）
 * - 交易频率：5分钟执行周期，超高频交易
 * - 空仓管理：允许短暂空仓，但不能连续2个周期空仓
 * 
 * 核心策略：
 * - 超短线交易：只看1m和3m线，忽略长周期
 * - 超高频交易：5分钟执行周期，持仓10-60分钟，单日30-80笔
 * - 微利即走：只要盈利覆盖手续费（0.5-0.8%）立即平仓
 * - 快速止盈：盈利>1%时，快速锁定利润
 * - 快速换仓：持仓>2个周期（10分钟）且盈利1>%没有到移动止盈范围，立即平仓换仓
 * - 快速试错：1m和3m同向即可开仓，依赖代码级止损保护
 * - 空仓限制：允许短暂空仓（1个周期），但连续空仓2个周期时必须开仓
 * - 风控方式：代码级自动止损止盈（enableCodeLevelProtection = true）
 * - 返佣收益：通过超高频交易累积手续费返佣
 * 
 * 策略原理：
 * - 手续费：开仓+平仓约0.1%（含Maker/Taker），考虑杠杆后实际成本约0.2-0.3%
 * - 返佣率：假设50-80%手续费返佣
 * - 盈利模式：每笔小盈利0.5-1% + 手续费返佣 = 双重收益
 * - 频率优势：单日30-80笔交易，累积收益可观
 * 
 * @param maxLeverage - 系统允许的最大杠杆倍数（从配置文件读取）
 * @returns 返佣套利策略的完整参数配置
 */
export function getRebateFarmingStrategy(maxLeverage: number): StrategyParams {
  // 计算返佣套利策略的杠杆范围：使用 40%-60% 的最大杠杆
  // 例如：系统最大杠杆25倍时，计算出10-15倍的杠杆范围
  // 不用太高杠杆，避免快速止损；也不用太低，需要一定盈利空间
  const rebateLevMin = Math.max(5, Math.ceil(maxLeverage * 0.4));   // 最小杠杆：40%最大杠杆，至少5倍
  const rebateLevMax = Math.max(8, Math.ceil(maxLeverage * 0.6));  // 最大杠杆：60%最大杠杆，至少8倍
  
  // 推荐杠杆：中间偏上（适合快速进出）
  const rebateLevGood = Math.max(6, Math.ceil(maxLeverage * 0.5));  // 50%
  
  return {
    // ==================== 策略基本信息 ====================
    name: "返佣套利",  // 策略名称（中文）
    description: "超短线高胜率策略，避免追涨杀跌，只看1m和3m线，6个入场条件全满足，RSI过滤避免超买超卖，持仓>10分钟且盈利<1%立即换仓",  // 策略描述
    
    // ==================== 杠杆配置 ====================
    // 杠杆范围：使用 40%-60% 最大杠杆（如系统最大25倍，则使用10-15倍）
    leverageMin: rebateLevMin,  // 最小杠杆倍数
    leverageMax: rebateLevMax,  // 最大杠杆倍数
    leverageRecommend: {
      normal: `${rebateLevMin}倍`,  // 普通信号：使用最小杠杆（谨慎入场）
      good: `${rebateLevGood}倍`,   // 良好信号：使用中等杠杆（标准配置）
      strong: `${rebateLevMax}倍`,  // 强信号：使用最大杠杆（把握机会）
    },
    
    // ==================== 仓位配置 ====================
    // 仓位范围：15-22%（中小仓位，快进快出，频繁交易）
    positionSizeMin: 15,  // 最小仓位：15%（普通信号）
    positionSizeMax: 22,  // 最大仓位：22%（强信号）
    positionSizeRecommend: {
      normal: "15-17%",   // 普通信号：小仓位，快速试探
      good: "17-20%",     // 良好信号：中等仓位，正常执行
      strong: "20-22%",   // 强信号：较大仓位，短期进攻
    },
    
    // ==================== 代码级止损配置 ====================
    // 根据杠杆倍数分级止损（代码自动执行，AI不需要管）
    // 返佣策略：快速止损，不恋战
    stopLoss: {
      low: -2.5,   // 低杠杆时：亏损1.8%止损（如使用5-8倍杠杆）
      mid: -2,   // 中杠杆时：亏损1.5%止损（如使用9-12倍杠杆）
      high: -1.8,  // 高杠杆时：亏损1.2%止损（如使用13倍以上杠杆）
    },
    
    // ==================== 代码级移动止盈配置 ====================
    // 盈利后移动止损线保护利润（代码自动执行，AI不需要管）
    trailingStop: {
      // 返佣套利策略：极快速锁利（微利即走，不贪心）
      // 第一档触发点极低，只要覆盖手续费+微利就走
      level1: { trigger: 1, stopAt: 0.8 },   // 盈利达到 +0.8% 时，止损线移至 +0.3%（保护0.5%空间）
      level2: { trigger: 2, stopAt: 1 },     // 盈利达到 +2% 时，止损线移至 +0.8%（保护1.2%空间）
      level3: { trigger: 4, stopAt: 2 },       // 盈利达到 +4% 时，止损线移至 +2%（保护2%空间，极少触发）
    },
    
    // ==================== 代码级分批止盈配置 ====================
    // 逐步锁定利润（代码自动执行，AI不需要管）
    partialTakeProfit: {
      // 返佣套利策略：快速全部止盈，不分批（高频交易模式）
      // 第一档就大部分平仓，保留少量追求更高收益
      stage1: { trigger: 1, closePercent: 30 },    // +3%时平仓70%（快速锁定大部分利润）
      stage2: { trigger: 3, closePercent: 30 },   // +6%时平仓剩余30%（累计平100%）
      stage3: { trigger: 5, closePercent: 100 },  // +10%时全部清仓（兜底，基本不会触发）
    },
    
    // ==================== 峰值回撤保护 ====================
    // 盈利从峰值回撤15%时，AI强烈建议平仓（快速保护微利）
    // 例如：峰值+2%，回撤到-13%时（回撤15个百分点），触发保护
    peakDrawdownProtection: 15,
    
    // ==================== 波动率调整 ====================
    // 根据市场波动自动调整杠杆和仓位
    volatilityAdjustment: {
      highVolatility: { 
        leverageFactor: 0.7,   // 高波动时，杠杆降低30%（如12倍→8.4倍）
        positionFactor: 0.75   // 高波动时，仓位降低25%（如20%→15%）
      },
      normalVolatility: { 
        leverageFactor: 1.0,   // 正常波动时，杠杆不调整
        positionFactor: 1.0    // 正常波动时，仓位不调整
      },
      lowVolatility: { 
        leverageFactor: 1.1,   // 低波动时，杠杆提高10%（如12倍→13.2倍）
        positionFactor: 1.05   // 低波动时，仓位提高5%（如20%→21%）
      },
    },
    
    // ==================== 策略规则描述 ====================
    entryCondition: "【优化超短线】只看1m和3m线，6个条件全满足才入场：趋势同向+RSI健康区间+MACD确认+价格结构+回调企稳+成交量，禁止追涨杀跌",
    riskTolerance: "单笔交易风险控制在15-22%之间，快速止损，不恋战，宁缺毋滥",
    tradingStyle: "超短线高胜率策略，避免追涨杀跌，等待回调入场，5分钟执行周期，持仓10-60分钟，快速止盈，适当频率累积收益",
    
    // ==================== 代码级保护配置 ====================
    // 启用代码级保护：系统每10秒自动检查止损和移动止盈
    // AI只需要负责开仓，平仓由代码自动执行
    enableCodeLevelProtection: true,
  };
}

/**
 * 生成返佣套利策略特有的提示词
 * 
 * 根据策略参数和运行上下文，生成传递给AI的策略提示词。
 * AI会根据这些提示词来指导交易决策。
 * 
 * @param params - 策略参数配置（从 getRebateFarmingStrategy 获得）
 * @param context - 运行时上下文（包含执行周期、持仓数量等）
 * @returns 返佣套利策略专属的AI提示词
 */
export function generateRebateFarmingPrompt(params: StrategyParams, context: StrategyPromptContext): string {
  return `
**策略目标**：通过超高频微利交易，累积手续费返佣收益
**目标月回报**：15-25%（交易盈利10-15% + 手续费返佣5-10%）
**盈亏比要求**：≥1.5:1（小目标，高胜率，快速止损，快速换仓）

【返佣套利策略核心原则】

本策略是专为拥有高额手续费返佣的用户设计的超高频微利策略：
- 主要收益来源：小额稳定盈利 + 高频交易手续费返佣
- 核心理念：微利即走，快速换仓，不贪心，频次取胜
- 执行周期：5分钟（超高频）
- 持仓时间：10-60分钟（快进快出）
- **⚠️ 重要约束1：允许短暂空仓（1个周期内），但不能连续2个周期空仓，第2个周期必须开仓**
- **⚠️ 重要约束2：持仓>10分钟且盈利>1%，并且未触发移动止盈的范围，必须立即平仓换仓**

【手续费与盈利计算】

1. 手续费成本：
   - 单笔交易手续费：开仓+平仓约0.1%（Maker+Taker）
   - 考虑杠杆影响：10倍杠杆下实际成本约0.2-0.3%
   - 盈利目标：需要覆盖手续费 + 0.5%以上即可平仓

2. 返佣收益：
   - 假设手续费返佣比例50-80%
   - 每笔交易额外获得手续费返佣收益
   - 高频交易累积，月度可观

3. 盈利目标（按10倍杠杆计算）：
   - 最低目标：+0.5%（覆盖手续费+微利）
   - 理想目标：+0.8-1.5%（小确定性盈利）
   - 最高目标：+2-3%（趋势强劲时追求更多）

【入场规则 - 超短线策略】

返佣套利策略的成功关键：**超短线快速捕捉，只看1m和3m，但要避免追涨杀跌！**

这是一个超高频策略，专注于捕捉最短期的价格波动：

**时间框架选择（核心）**：
- **只关注1分钟（1m）和3分钟（3m）线** 
- **忽略所有长周期**：不看15m、30m、1h、4h等，它们对超短线交易反应太慢
- **原因**：持仓时间只有10-60分钟，长周期趋势在如此短的持仓时间内意义不大

**⚠️ 核心改进：避免追涨杀跌陷阱**

常见失败模式：
- ❌ 看到1m和3m上涨就追多 → 正好买在短期顶部 → 回调被止损
- ❌ 看到1m和3m下跌就追空 → 正好卖在短期底部 → 反弹被止损

**改进后的入场条件（6个必备条件）**：

**做多（long）入场条件** - 以下6个条件**必须全部满足**：
1. ✅ **趋势确认（1m和3m）**：
   - 1m和3m的EMA均线都向上
   - 价格在1m和3m的EMA均线上方
   
2. ✅ **避免超买区域**：
   - 1m的RSI < 75（避免超买）
   - 3m的RSI在50-75之间（健康上涨区间）
   - **关键**：不在RSI > 75的超买区开多，等回调后再进
   
3. ✅ **动量确认**：
   - 1m的MACD柱状图为红色（正值）
   - 3m的MACD柱状图也为红色（正值）
   - MACD快线在慢线上方
   
4. ✅ **价格结构**：
   - 最近3根1m K线中，至少有2根是阳线（收盘>开盘）
   - 当前价格不能是1m近10根K线的最高点（避免追顶）
   
5. ✅ **回调入场优先**：
   - 优先选择：3m上涨趋势中，1m出现小幅回调后企稳的币种
   - 等待：RSI从超买区（>75）回落到60-70区间时入场
   - 避免：RSI正在冲高突破75的币种（可能马上回调）
   
6. ✅ **成交量确认**：
   - 1m和3m的成交量相对平稳或放大
   - 避免在成交量急剧萎缩时开仓

**做空（short）入场条件** - 以下6个条件**必须全部满足**：
1. ✅ **趋势确认（1m和3m）**：
   - 1m和3m的EMA均线都向下
   - 价格在1m和3m的EMA均线下方
   
2. ✅ **避免超卖区域**：
   - 1m的RSI > 25（避免超卖）
   - 3m的RSI在25-50之间（健康下跌区间）
   - **关键**：不在RSI < 25的超卖区开空，等反弹后再进
   
3. ✅ **动量确认**：
   - 1m的MACD柱状图为绿色（负值）
   - 3m的MACD柱状图也为绿色（负值）
   - MACD快线在慢线下方
   
4. ✅ **价格结构**：
   - 最近3根1m K线中，至少有2根是阴线（收盘<开盘）
   - 当前价格不能是1m近10根K线的最低点（避免追底）
   
5. ✅ **反弹入场优先**：
   - 优先选择：3m下跌趋势中，1m出现小幅反弹后承压的币种
   - 等待：RSI从超卖区（<25）回升到30-40区间时入场
   - 避免：RSI正在下跌突破25的币种（可能马上反弹）
   
6. ✅ **成交量确认**：
   - 1m和3m的成交量相对平稳或放大
   - 避免在成交量急剧萎缩时开仓

**入场信号强度评估（调整后）**：
- **强信号**（使用${params.leverageMax}倍杠杆，${params.positionSizeRecommend.strong}仓位）：
  * 6个条件完美满足
  * RSI在理想区间（做多：60-70，做空：30-40）
  * MACD柱状图连续扩大
  * 刚从回调/反弹中企稳
  
- **良好信号**（使用${params.leverageRecommend.good}杠杆，${params.positionSizeRecommend.good}仓位）：
  * 6个条件都满足
  * RSI在健康区间（做多：50-75，做空：25-50）
  * MACD方向明确
  
- **普通信号**（使用${params.leverageMin}倍杠杆，${params.positionSizeRecommend.normal}仓位）：
  * 6个条件刚好满足
  * 部分指标处于临界状态
  * 谨慎试探性开仓

**特别说明**：
- ⚠️ **禁止追涨杀跌**：看到连续上涨/下跌时，不要立即追入，等待回调/反弹后再进
- ⚠️ **RSI过滤是关键**：RSI超买（>75）禁止做多，RSI超卖（<25）禁止做空
- ⚠️ **耐心等待回调**：3m上涨但1m RSI>75 → 等待1m回调到60-70再做多
- ⚠️ **耐心等待反弹**：3m下跌但1m RSI<25 → 等待1m反弹到30-40再做空
- ✅ **依赖代码级止损**：即使方向判断错误也能快速止损保护

【持仓管理 - AI职责】

注意：本策略已启用代码级自动止损和移动止盈（每10秒检查），AI不需要主动平仓！

代码自动执行的规则：
1. 自动止损（根据杠杆自动触发）：
   - ${params.leverageMin}-${Math.ceil(params.leverageMin + (params.leverageMax - params.leverageMin) * 0.33)}倍杠杆：亏损${params.stopLoss.low}%自动止损
   - ${Math.ceil(params.leverageMin + (params.leverageMax - params.leverageMin) * 0.33) + 1}-${Math.ceil(params.leverageMin + (params.leverageMax - params.leverageMin) * 0.67)}倍杠杆：亏损${params.stopLoss.mid}%自动止损
   - ${Math.ceil(params.leverageMin + (params.leverageMax - params.leverageMin) * 0.67) + 1}倍以上杠杆：亏损${params.stopLoss.high}%自动止损

2. 自动移动止盈（核心规则）：
   - Level 1: 盈利达到+${params.trailingStop.level1.trigger}%时，止损线移至+${params.trailingStop.level1.stopAt}%（微利即走）
   - Level 2: 盈利达到+${params.trailingStop.level2.trigger}%时，止损线移至+${params.trailingStop.level2.stopAt}%（保护更多）
   - Level 3: 盈利达到+${params.trailingStop.level3.trigger}%时，止损线移至+${params.trailingStop.level3.stopAt}%（极少触发）

3. 自动分批止盈：
   - 盈利达到+${params.partialTakeProfit.stage1.trigger}%时，自动平仓${params.partialTakeProfit.stage1.closePercent}%
   - 盈利达到+${params.partialTakeProfit.stage2.trigger}%时，自动平仓剩余仓位（累计100%）

AI的职责（重要）：
- ✅ 专注分析市场，寻找顺趋势入场机会
- ✅ 监控持仓状态，报告盈亏情况
- ✅ 分析趋势是否继续强劲
- ✅ **【超短线快速换仓规则】AI需要主动执行**：
  * 如果持仓时间超过2个交易周期（10分钟）
  * 且盈利未达到1%（未触发移动止盈）
  * **必须立即平仓**，释放资金寻找更好的机会
  * 这是超短线策略的核心：快速试错，不恋战
- ❌ 除了上述快速换仓规则外，不要主动平仓（其他情况代码会自动执行）
- ❌ 不要因为盈利小就想手动平仓（相信代码的移动止盈规则）

【开仓频率控制 - 调整后】

优化后的策略强调"质量优于数量"：
- 每个执行周期（5分钟）寻找符合6个条件的高质量机会
- 总持仓数不超过${context.maxPositions}个
- **宁缺毋滥**：只有6个条件全满足才开仓，没有机会就耐心等待
- 预期频率：从原来的单日30-80笔，调整为单日10-30笔高质量交易
- 依靠高胜率提升盈利，而不是盲目追求高频次

【空仓管理 - 调整后的规则】

⚠️ **新规则：由于入场条件变严格，空仓管理规则也相应调整**

调整后的空仓管理规则：
1. **允许适度空仓**：允许空仓1-2个周期（5-10分钟），用于等待符合6个条件的高质量机会
2. **限制过度空仓**：连续空仓超过3个周期（15分钟）时，需要降低入场标准
3. **空仓分级规则**：
   - 第1-2个周期空仓：✅ 允许，耐心等待6个条件全满足的机会
   - 第3个周期空仓：⚠️ 警告，考虑适度放宽标准
   - 第4个周期空仓：❌ 必须开仓，使用降级标准
4. **第4周期强制开仓原则**（降级标准）：
   - 已空仓3个周期 → 扫描所有币种
   - 降级条件：只要满足以下4个核心条件即可开仓：
     * ✅ 1m和3m趋势同向（EMA+价格位置）
     * ✅ RSI不在极端区域（做多：RSI<75，做空：RSI>25）
     * ✅ MACD方向一致
     * ✅ 至少有2根K线同方向
   - 其他条件可以适度放宽（如回调确认、成交量等）
   - 使用较小的杠杆和仓位（${params.leverageMin}倍杠杆，${params.positionSizeMin}%仓位）
5. **为什么调整空仓规则**：
   - 新的6个入场条件更严格，机会相对减少
   - 允许适度空仓，避免强行开仓导致低胜率
   - 但也不能过度空仓，需要平衡"质量"和"频率"
   - 返佣策略仍需要一定的交易频率来累积返佣收益
6. **空仓处理流程**：
   - 第1次检测到空仓 → 记录空仓开始时间，耐心等待完美机会
   - 第2次检测到空仓 → 继续等待，但开始扫描潜在机会
   - 第3次检测到空仓 → 警告，考虑降低标准
   - 第4次检测到空仓 → 必须使用降级标准开仓（4个核心条件）
   - 开仓后严格执行代码级止损保护，快速止损不恋战

【风险控制红线】

1. 严格止损：代码会自动执行，亏损1.8-2.5%立即止损
2. **6个入场条件必须全满足**：缺一不可，避免盲目开仓
3. **禁止追涨杀跌**：
   - 做多时：1m RSI必须<75，避免超买区入场
   - 做空时：1m RSI必须>25，避免超卖区入场
   - 优先等待回调/反弹后的二次入场机会
4. **快速换仓（核心规则）**：持仓超过2个周期（10分钟）且盈利<1%，必须立即平仓换仓
5. 快速试错：入场条件严格后，允许耐心试错，错了就快速止损
6. 持仓时间上限：单笔持仓不应超过60分钟，超过需立即评估
7. 宁缺毋滥：找不到符合6个条件的机会，宁可空仓等待

【成功要诀】

✅ **避免追涨杀跌（核心）**：不在RSI超买/超卖区开仓，等待回调/反弹
✅ **6个入场条件全满足**：趋势+RSI+MACD+价格结构+回调确认+成交量，缺一不可
✅ 只看1m和3m：忽略长周期，专注超短线，快速捕捉波动
✅ **RSI区间过滤**：
  - 做多：1m RSI必须<75，3m RSI在50-75
  - 做空：1m RSI必须>25，3m RSI在25-50
✅ **回调入场优先**：等待小幅回调后企稳再进，不追已经冲高的币种
✅ **快速换仓**：持仓>10分钟且盈利<1%，立即平仓换更好的机会
✅ 微利即走：不贪心，覆盖手续费+小盈利就满足（代码自动止盈）
✅ 快速止损：亏损不恋战，代码自动止损保护
✅ 宁缺毋滥：找不到完美机会，宁可空仓等待
✅ 返佣收益：通过高质量交易累积手续费返佣

❌ 失败根源（必须避免）
❌ **追涨杀跌**：看到上涨就追多，看到下跌就追空=买在顶部卖在底部
❌ **RSI超买做多**：1m RSI>75还做多=正好遇到回调被止损
❌ **RSI超卖做空**：1m RSI<25还做空=正好遇到反弹被止损
❌ **不等回调**：看到连续上涨不等回调就入场=追高风险
❌ **条件不全就开仓**：6个条件没有全满足就盲目开仓=胜率低
❌ 连续空仓：连续2个周期空仓=违反策略规则（但允许1个周期空仓）
❌ 看长周期：看30m/1h等长周期=反应太慢，错过机会
❌ **持仓恋战**：持仓>10分钟还不盈利1%，不愿换仓=浪费时间和机会成本
❌ 过度贪心：微利不平仓，等待更高目标=利润回吐

【策略适用场景】

最适合的市场环境：
✅ 任何有波动的市场（波动=机会）
✅ 超短期趋势明确（1m和3m同向）
✅ 市场流动性好，滑点小
✅ 高波动市场（更容易产生1m和3m的同向信号）

不适合的市场环境：
❌ 完全无波动（价格几乎不动）
❌ 极端剧烈波动（止损来不及执行）
❌ 流动性差（滑点大，影响盈利）

**注意**：超短线策略不怕震荡，震荡也能做！只要1m和3m同向即可。

【特别提醒】

这是一个优化后的超短线策略：
- 核心改进：**避免追涨杀跌**，等待回调/反弹后入场
- 入场标准：**6个条件必须全满足**，宁缺毋滥
- **RSI过滤是关键**：做多时RSI<75，做空时RSI>25，避免极端区域
- 只看1m和3m，忽略所有长周期
- **快速换仓**：持仓超过2个周期（10分钟）且盈利<1%，必须立即平仓换仓
- 空仓管理：允许空仓1-2个周期等待高质量机会，第4周期必须使用降级标准开仓
- 相信代码的自动止盈和止损，但AI需要主动执行快速换仓规则
- 成功靠的是"高胜率"+"适当频率"，不是"超高频次"

记住核心规则：
1. **禁止追涨杀跌**=不在RSI超买/超卖区开仓
2. **6个入场条件全满足**=趋势+RSI+MACD+价格结构+回调确认+成交量
3. **等待回调入场**=3m上涨但1m已冲高 → 等待1m回调后再进
4. 超短线=只看1m和3m
5. 微利=单笔0.5-1.5%
6. 空仓调整=允许空仓1-2个周期，第4周期使用降级标准强制开仓

⚠️ **最重要的改进**：
- 旧策略：看到上涨就追多 → 买在顶部 → 回调止损 ❌
- 新策略：等待小幅回调后企稳 → 买在相对低点 → 上涨盈利 ✅
`;
}

